From ffb7e747bc4509d2c2d7ccdd5da433afe523b144 Mon Sep 17 00:00:00 2001 From: "kfraser@localhost.localdomain" Date: Tue, 6 Mar 2007 16:51:42 +0000 Subject: [PATCH] ioemu: Close file descriptors when forking processes. Just leave stdin/stdout/stderr (and possibly tap fd) open. Signed-off-by: Daniel P. Berrange --- tools/ioemu/vl.c | 8 ++++++++ tools/ioemu/vnc.c | 8 +++++++- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/tools/ioemu/vl.c b/tools/ioemu/vl.c index 283e86a487..0b78fa8650 100644 --- a/tools/ioemu/vl.c +++ b/tools/ioemu/vl.c @@ -3250,6 +3250,14 @@ static int net_tap_init(VLANState *vlan, const char *ifname1, pid = fork(); if (pid >= 0) { if (pid == 0) { + int open_max = sysconf(_SC_OPEN_MAX), i; + for (i = 0; i < open_max; i++) + if (i != STDIN_FILENO && + i != STDOUT_FILENO && + i != STDERR_FILENO && + i != fd) + close(i); + parg = args; *parg++ = (char *)setup_script; *parg++ = ifname; diff --git a/tools/ioemu/vnc.c b/tools/ioemu/vnc.c index 46f3614c21..d06b47a220 100644 --- a/tools/ioemu/vnc.c +++ b/tools/ioemu/vnc.c @@ -1445,7 +1445,7 @@ int vnc_display_init(DisplayState *ds, int display, int find_unused, struct sock int vnc_start_viewer(int port) { - int pid; + int pid, i, open_max; char s[16]; sprintf(s, ":%d", port); @@ -1456,6 +1456,12 @@ int vnc_start_viewer(int port) exit(1); case 0: /* child */ + open_max = sysconf(_SC_OPEN_MAX); + for (i = 0; i < open_max; i++) + if (i != STDIN_FILENO && + i != STDOUT_FILENO && + i != STDERR_FILENO) + close(i); execlp("vncviewer", "vncviewer", s, NULL); fprintf(stderr, "vncviewer execlp failed\n"); exit(1); -- 2.30.2